package Pong;

import java.io.*;
import java.net.*;

public class Bal extends Thread{
	String xpos_thread = "0"; //startpositie van het balletje mag door server worden meegegeven (begin nieuw spel bv)
	String ypos_thread = "0";
	int dir_x=1;
	int dir_y=-1;
	int xpos_1;
	int xpos_2;
	int snelheid;
	int afw_x=1;
	int afw_y=1;
	boolean player1_mis=false; // meegeven met de server hiermee worden de levens berekend van de players
	boolean player2_mis=false;
	Server server;
	boolean spelen=true;

	public Bal(Server server) {
	this.server = server;	
	}
	
	public void run() {
	int x = Integer.parseInt(xpos_thread)+6;
	int y = Integer.parseInt(ypos_thread)+6;
	
	while (spelen){
		snelheid = 5;
		xpos_2=server.getxpos_1();
		xpos_1=-server.getxpos_2();
		if ((dir_x==1) & (dir_y==-1)){ //bal beweegt van linksonder naar rechtsboven    MALFUNCTION
			y=y-afw_y;
			x=x+afw_x;
			if(((x<(xpos_1-50))||(x>(xpos_1+50)))&((y>-350)&(y<-345))){ // player 1 mist de bal   
				player1_mis=true;
			}
			if (((x>(xpos_1-50))&(x<(xpos_1)))&((y>-340)&(y<-330))){ // player 1 raakt de bal linkerhelft
				if (((x>(xpos_1-50))&(x<(xpos_1-30)))&((y>-340)&(y<-330))){ //kaats op uiteinde verhooght snelheid   
					snelheid = 3;
				}
				afw_x=(int) (2* Math.random()+1);
				afw_y=(int) (2* Math.random()+1);
				dir_x=-1; 
				dir_y=1;
			}
			if (((x>(xpos_1))&(x<(xpos_1+50)))&((y>-340)&(y<-330))){ // player 1 raakt de bal rechterhelft 
				if (((x>(xpos_1+30))&(x<(xpos_1+50)))&((y>-340)&(y<-330))){ //kaats op uiteinde verhooght snelheid
					snelheid = 3;
				}
				dir_x=1; 
				dir_y=1;
				afw_x=(int) (2* Math.random()+1);
				afw_y=(int) (2* Math.random()+1);
				}
			if((x>340)&(x<350)){ 
			dir_x=-1;
			dir_y=-1;
			afw_x=(int) (2* Math.random()+1);
			afw_y=(int) (2* Math.random()+1);
			}
		}

		if ((dir_x==1) & (dir_y==1)){ //Bal beweegt van linksboven naar rechtsonder    
			y=y+afw_y;
			x=x+afw_x;
			if(((x<(xpos_2-50))||(x>(xpos_2+50)))&((y>340)&(y<=350))){ //Player 2 mist de bal  
				player2_mis=true;	
			}
			if (((x>(xpos_2-50))&(x<(xpos_2)))&((y>330)&(y<340))){ //Player 2 raakt de bal op de linkerkant
				afw_x=(int) (2* Math.random()+1);
				afw_y=(int) (2* Math.random()+1);
				dir_x=-1; 
				dir_y=-1;
				if (((x>(xpos_2)-50)&(x<(xpos_2-30)))&((y>330)&(y<340))){ //Snelheid verhoogt bij kaats op uiteinde
					snelheid = 3;
				}
			}
			if (((x>(xpos_2))&(x<(xpos_2+50)))&((y>330)&(y<340))){ //Player 2 raakt de bal op de rechterkant
				if (((x>(xpos_2+30))&(x<(xpos_2+50)))&((y>330)&(y<340))){ //Snelheid verhoogt bij kaats op uiteinde
					snelheid = 3;
				}
				dir_x=1; 
				dir_y=-1;
				afw_x=(int) (2* Math.random()+1);
				afw_y=(int) (2* Math.random()+1);
				}
			if((x>340)&(x<350)){ //Kaats op zijkant van het veld
			dir_x=-1;
			dir_y=+1;
			afw_x=(int) (2* Math.random()+1);
			afw_y=(int) (2* Math.random()+1);
			}
		}

		if ((dir_x==-1) & (dir_y==-1)){ //Bal beweegt van rechtsonder naar linksboven   
			y=y-afw_y;
			x=x-afw_x;
			if(((x<(xpos_1-50))||(x>(xpos_1+50)))&((y>-340)&(y<-330))){ //Player 1 mist de bal
				player1_mis=true;
			}	
			if (((x>(xpos_1-50))&(x<(xpos_1)))&((y>-340)&(y<-330))){ //Player 1 raakt de bal op de linkerkant   
				afw_x=(int) (2* Math.random()+1);
				afw_y=(int) (2* Math.random()+1);
				dir_x=-1; 
				dir_y=1;
				if (((x>(xpos_1-50))&(x<(xpos_1-30)))&&((y>-340)&(y<-330))){ //Snelheid verhoogt bij kaats op uiteinde
					snelheid = 3;
				}
			}
			if (((x>(xpos_1))&(x<(xpos_1+50)))&((y>-340)&(y<-330))){ //Player 1 raakt de bal op de rechterkant
				if (((x>(xpos_1+30))&(x<(xpos_1+50)))&((y>-340)&(y<-330))){ //Snelheid verhoogt bij kaats op uiteinde
					snelheid = 3;
				}
				dir_x=1; 
				dir_y=1;
				afw_x=(int) (2* Math.random()+1);
				afw_y=(int) (2* Math.random()+1);
				}
			if((x>-350)&(x<-340)){ //Kaats op zijkant van het veld
			dir_x=1;
			dir_y=-1;
			afw_x=(int) (2* Math.random()+1);
			afw_y=(int) (2* Math.random()+1);
			}
		}

		if ((dir_x==-1) & (dir_y==1)){ //Bal beweegt van rechtsboven naar linksonderen    
			y=y+afw_y;;
			x=x-afw_x;;
			if(((x<(xpos_2-50))||(x>(xpos_2+50)))&((y>340)&(y<=350))){ //Player 2 mist de bal    
				player2_mis=true;
			}
			if (((x>(xpos_2-50))&(x<(xpos_2)))&((y>330)&(y<340))){ //Player 2 raakt de bal op de linkerkant
				afw_x=(int) (2* Math.random()+1);
				afw_y=(int) (2* Math.random()+1);
				dir_x=-1; 
				dir_y=-1;
				if (((x>(xpos_2-50))&(x<(xpos_2-30)))&((y>330)&(y<340))){ //Snelheid verhoogt bij kaats op uiteinde
					snelheid = 3;
				}
			}
			if (((x>(xpos_2))&(x<(xpos_2+50)))&((y>330)&(y<340))){ //Player 2 raakt de bal op de rechterkant 
				if (((x>(xpos_2+30))&(x<(xpos_2+50)))&((y>330)&(y<340))){ //Snelheid verhoogt bij kaats op uiteinde
					snelheid = 3;
				}
				dir_x=1; 
				dir_y=-1;
				afw_x=(int) (2* Math.random()+1);
				afw_y=(int) (2* Math.random()+1);
				}
			if((x>-350)&(x<-340)){ //Kaats op zijkant van het veld                   
			dir_x=1;
			dir_y=1;
			afw_x=(int) (2* Math.random()+1);
			afw_y=(int) (2* Math.random()+1);
			}
		}		
		
		slaap(snelheid);
		ypos_thread=y+"";	
		xpos_thread=x+"";	
		
		if ((player1_mis)||(player2_mis)){ // einde van het spel 
			server.thstop();
		}
	}

	} // einde van de run()
	public String getXpos_thread(){
		return xpos_thread.toString();
	}
	public String getYpos_thread(){
		return ypos_thread.toString();
	}
	public static void slaap (int mSec){		 
  		try {
  			Thread.currentThread().sleep(mSec); 
  		} catch (InterruptedException e){ }
  	} 
	
}